//给定一种规律 pattern 和一个字符串 s ，判断 s 是否遵循相同的规律。 
//
// 这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 
//
// 
//
// 示例1: 
//
// 
//输入: pattern = "abba", s = "dog cat cat dog"
//输出: true 
//
// 示例 2: 
//
// 
//输入:pattern = "abba", s = "dog cat cat fish"
//输出: false 
//
// 示例 3: 
//
// 
//输入: pattern = "aaaa", s = "dog cat cat dog"
//输出: false 
//
// 
//
// 提示: 
//
// 
// 1 <= pattern.length <= 300 
// pattern 只包含小写英文字母 
// 1 <= s.length <= 3000 
// s 只包含小写英文字母和 ' ' 
// s 不包含 任何前导或尾随对空格 
// s 中每个单词都被 单个空格 分隔 
// 
//
// Related Topics 哈希表 字符串 👍 715 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean wordPattern(String pattern, String s) {
        //这个和以前哪道题是一样的
        //AI: LeetCode 205. 同构字符串
        String [] sArr = s.split(" ");
        if(pattern.length() != sArr.length) {
            return false;
        }

        HashMap<Character, String> letterToWord = new HashMap<>();
        HashMap<String, Character> wordToLetter = new HashMap<>();

        for(int i =0; i<pattern.length(); i++){
            Character letter = pattern.charAt(i);
            String word = sArr[i];
            if(letterToWord.containsKey(letter) && !letterToWord.get(letter).equals(word)){
                return false;
            }else{
                letterToWord.put(letter, word);
            }

            if(wordToLetter.containsKey(word) && wordToLetter.get(word)!=letter){
                return false;
            }else{
                wordToLetter.put(word, letter);
            }
        }

        return true;

//        > 2025/08/23 00:40:01
//        解答成功:
//        执行耗时:1 ms,击败了96.04% 的Java用户
//        内存消耗:40.5 MB,击败了88.67% 的Java用户


    }
}
//leetcode submit region end(Prohibit modification and deletion)
